package cn.edu.xjtu.android.emoji_warfare_android.game;

/**
 * BulletsBuilder<br>
 * 子弹构建类，用于生成多种不同类型的子弹
 * 
 * @author bill
 *
 */
public class BulletsBuilder {
    /**
     * 散弹
     * 
     * @param x
     *            发射点x坐标
     * @param y
     *            发射点y坐标
     * @param atk
     *            子弹攻击力
     * @param speed
     *            子弹速度
     * @param angleRange
     *            角度开口大小
     * @param angleCenter
     *            中间角度方向
     * @param count
     *            数目
     * @param type
     *            类型
     * @return 子弹数组
     */
    public static Bullet[] buildScattershot(float x, float y, int atk, float speed, float angleRange, float angleCenter,
            int count, int type) {
        if (count < 2) {
            count = 2;
        }
        Bullet[] bullets = new Bullet[count];
        float angle = angleCenter - angleRange / 2.0f;
        float dangle = angleRange / (count - 1);
        for (int i = 0; i < count; i++) {
            bullets[i] = new Bullet(x, y, atk, angle, speed, type);
            angle += dangle;
        }
        return bullets;
    }

    /**
     * 平行弹
     * 
     * @param x
     *            发射点x坐标
     * @param y
     *            发射点y坐标
     * @param atk
     *            子弹攻击力
     * @param speed
     *            子弹速度
     * @param angle
     *            发射方向
     * @param range
     *            范围宽度
     * @param count
     *            子弹个数
     * @param type
     *            子弹类型
     * @return 子弹数组
     */
    public static Bullet[] buildParallel(float x, float y, int atk, float speed, float angle, float range, int count,
            int type) {
        if (count < 2) {
            count = 2;
        }
        float rangle = (float) (angle * Math.PI / 180);
        float lx = (float) (range * Math.sin(rangle));
        float ly = (float) (range * Math.cos(rangle));
        float dx = lx / (count - 1);
        float dy = ly / (count - 1);
        x -= lx / 2.0f;
        y -= ly / 2.0f;
        Bullet[] bullets = new Bullet[count];
        for (int i = 0; i < count; i++) {
            bullets[i] = new Bullet(x, y, atk, angle, speed, type);
            x += dx;
            y += dy;
        }
        return bullets;
    }

    /**
     * 线性子弹
     * 
     * @param x
     *            发射点x坐标
     * @param y
     *            发射点y坐标
     * @param atk
     *            子弹攻击力
     * @param speed
     *            子弹速度
     * @param angle
     *            发射方向
     * @param range
     *            长度
     * @param count
     *            子弹个数
     * @param type
     *            子弹类型
     * @return 子弹数组
     */
    public static Bullet[] buildLine(float x, float y, int atk, float speed, float angle, float range, int count,
            int type) {
        if (count < 2) {
            count = 2;
        }
        float rangle = (float) (angle * Math.PI / 180);
        float lx = (float) (range * Math.cos(rangle));
        float ly = (float) (range * Math.sin(rangle));
        float dx = lx / (count - 1);
        float dy = ly / (count - 1);
        x -= lx / 2.0f;
        y -= ly / 2.0f;
        Bullet[] bullets = new Bullet[count];
        for (int i = 0; i < count; i++) {
            bullets[i] = new Bullet(x, y, atk, angle, speed, type);
            x += dx;
            y += dy;
        }
        return bullets;
    }
}
